#ifndef STATES_H
#define STATES_H

#include <deque>

#include "engine.h"
#include "baseCTF.h"


struct PlayerInfo : public State
{
	// number of players in the game (public information)
	int numPlayers;
	// names of each player, which are not necessarily visible to everyone
	std::vector<std::string> playerNames;
	std::vector<PlayerMask> nameMasks;
	// current turn (public information)
	Turn currentTurn;

	DECLARE_STATE("#PlayerInfo")
};


struct Map : public State
{
	// width, height, grid type of map (public information)
	int width, height, gridtype;
	// terrain values for each tile
	std::vector<int> terrain;
	// basic accessibility for each tile: whether it's impassible or not
	// ...this is a deque only because goddamn vector<bool> trashes our helper functions
	std::deque<bool> impassible;
	// visibility for each tile; guards terrain, impassible
	// ...note that non-visible terrain tiles are *not* guaranteed to be TERRAIN_UNKNOWN;
	//  when a mask == HIDDEN, the protected data is *garbage*
	std::vector<PlayerMask> visibility;

	DECLARE_STATE("#Map")
};


// inherent characteristics of campers
struct CamperAttributes : public State
{
	int vision;
	PlayerMask visionMask;
	int strength;
	PlayerMask strengthMask;
	int speed;
	PlayerMask speedMask;

	DECLARE_STATE("#CamperAttributes")
};


// current status of campers
struct CamperStatus : public State
{
	GridPos pos;
	bool jailed;
	PlayerMask posMask;
	int movementPts;
	PlayerMask ptsMask;
	int stance;
	PlayerMask stanceMask;

	DECLARE_STATE("#CamperStatus")
};




#endif // STATES_H